// 从左右往右计算每个节点的最大值，计算规则：
// 如果前面一个节点最大值为正数，则当前的节点最大值更新=当前值+前面节点最大值
// 反之保持自身值作为当前节点的最大值，遍历过去的时候同时记录最大值max 作为结果
int maxSubArray(int* nums, int numsSize){
    int idx;
    int max = nums[0];
    int cur_max = nums[0]; // 表示每个扫描节点的最大值
    for (idx = 1; idx < numsSize; idx++) {
        // 更新 cur_max,如果前一个节点为正数才累加
        if(cur_max > 0) {
            cur_max = cur_max + nums[idx];
        } else {
            cur_max = nums[idx];
        }
        // 更新最大值
        if(cur_max > max) {
            max = cur_max;
        }

    }
    return max;
}